#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    //child
    int count = 5;
    while(count)
    {
      printf("I am child, pid:%d, ppid:%d\n", getpid(), getppid());
      count--;
      sleep(1);
    }
      exit(1);
  }
  else if(id < 0){
    printf("fork fail\n");
  }
 
  //father
  int i = 8;
  while(i)
  {
    int status = 0;
    pid_t ret = waitpid(id, &status, WNOHANG);
    
    if(ret > 0){
      printf("wait succesfully!\n");
      printf("status:%d\n", status);
      printf("child exit code:%d\n", WEXITSTATUS(status));
      printf("ret:%d\n", ret);
      break;
    }
    else if(ret < 0){
      printf("wait fail\n");
      break;
    }
    else{
      printf("wait succesfully!\n");
      printf("Child run......\n");
      printf("Father does other things!\n");
      printf("ret:%d\n", ret);
      sleep(1);
      i--;
    }
  }

  return 0;

 // //father
 // int status = 0;
 // printf("Father does other things!\n");
 // sleep(2);
 // pid_t ret = waitpid(id, &status, WNOHANG);
 // if(ret > 0){
 //   printf("wait succesfully!\n");
 //   printf("status:%d\n", status);
 //   printf("child exit code:%d\n", WEXITSTATUS(status));
 // }
 // else if(ret < 0){
 //   printf("wait fail\n");
 // }
 // else{
 //   printf("wait succesfully!\n");
 //   printf("Child run......\n");
 //   printf("Father quit......\n");
 // }

 // printf("ret:%d\n", ret);

 // return 0;

//  pid_t id = fork();
//  if(id == 0)
//  {
//    //child
//    int count = 10;
//    while(count)
//    {
//      printf("I am child, pid:%d, ppid:%d\n", getpid(), getppid());
//      count--;
//      sleep(1);
//    }
//      exit(1);
//  }
//  else if(id < 0){
//    printf("fork fail\n");
//  }
//
//  //father
//  int status = 0;
//  printf("Father does other things!\n");
//  pid_t ret = waitpid(id, &status, 0);
//  if(ret > 0){
//    printf("wait succesfully!\n");
//    printf("status:%d\n", status);
//    printf("child exit code:%d\n", WEXITSTATUS(status));
//  }
//  else{
//    printf("wait fail\n");
//  }
//
//  return 0;
}
